package com.lihepeng.leecode.tree;

/**
 * DFS
 * 实现一个函数，检查二叉树是否平衡。在这个问题中，平衡树的定义如下：任意一个节点，其两棵子树的高度差不超过 1。
 */
public class Solution0404 {
    // 深度优选算出 左子树高度
    public boolean isBalanced(TreeNode root) {
        if (root == null) {
            return true;
        }
        int leftTreeDepth = treeDepth(root.left);
        int rightTreeDepth = treeDepth(root.right);
        if (Math.abs(leftTreeDepth - rightTreeDepth) > 1) {
            return false;
        }
        return isBalanced(root.left) && isBalanced(root.right);
    }

    private int treeDepth(TreeNode left) {
        if (left == null) {
            return 0;
        }
        // 当前的高度等于左子树和右边的告诉的最大值 +1
        return Math.max(treeDepth(left.left), treeDepth(left.right)) + 1;
    }
}
